package com.dragon.backstage.domain.vo.login;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 用户登陆VO
 *
 * @author dragon
 * @version 1.0
 * @date 2024/8/1 17:49
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(title = "用户登陆VO")
public class LoginVo {

    /**
     * 用户ID
     */
    @Schema(title = "用户ID")
    private Long userId;

    /**
     * 账号
     */
    @Schema(title = "账号")
    private String account;

    /**
     * 昵称
     */
    @Schema(title = "昵称")
    private String nickName;

    /**
     * Token信息
     */
    @Schema(title = "Token信息")
    private TokenInfo tokenInfo;


    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @Schema(title = "用户登陆Token信息VO")
    public static class TokenInfo {

        /**
         * token名称
         */
        @Schema(title = "token名称")
        public String tokenName;

        /**
         * token值
         */
        @Schema(title = "token值")
        public String tokenValue;

        /**
         * 此token是否已经登录
         */
        @Schema(title = "此token是否已经登录")
        public Boolean isLogin;

        /**
         * 此token对应的LoginId，未登录时为null
         */
        @Schema(title = "此token对应的LoginId，未登录时为null")
        public Object loginId;

        /**
         * 多账号体系下的账号类型
         */
        @Schema(title = "多账号体系下的账号类型")
        public String loginType;

        /**
         * token剩余有效期 (单位: 秒)
         */
        @Schema(title = "token剩余有效期 (单位: 秒)")
        public long tokenTimeout;

        /**
         * Account-Session 剩余有效时间（单位: 秒）
         */
        @Schema(title = "Account-Session 剩余有效时间（单位: 秒）")
        public long sessionTimeout;

        /**
         * Token-Session 剩余有效时间（单位: 秒）
         */
        @Schema(title = "Token-Session 剩余有效时间（单位: 秒）")
        public long tokenSessionTimeout;

        /**
         * token 距离被冻结还剩多少时间（单位: 秒）
         */
        @Schema(title = "token 距离被冻结还剩多少时间（单位: 秒）")
        public long tokenActiveTimeout;

        /**
         * 登录设备类型
         */
        @Schema(title = "登录设备类型")
        public String loginDevice;

        /**
         * 自定义数据（暂无意义，留作扩展）
         */
        @Schema(title = "自定义数据（暂无意义，留作扩展）")
        public String tag;

    }

}
